package com.example.gitzuoye3

import android.content.ContentValues
import android.content.Intent
import android.content.SharedPreferences
import android.database.sqlite.SQLiteDatabase
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.gitzuoye3.SQL

/**
 * 主登录Activity，处理用户登录和注册跳转功能
 * 包含记住密码功能
 */
class MainActivity : AppCompatActivity() {

    // 声明UI组件变量
    private lateinit var zhanghao: EditText       // 账号输入框
    private lateinit var mima: EditText           // 密码输入框
    private lateinit var denglu: Button          // 登录按钮
    private lateinit var zhuce: Button          // 注册按钮
    private lateinit var dbHelper:SQL         // 数据库帮助类
    private lateinit var db: SQLiteDatabase   // 数据库对象
    private lateinit var sharedPrefs: SharedPreferences // 用于存储登录偏好设置
    private lateinit var jizhu: CheckBox     // "记住密码"复选框

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main) // 设置布局文件

        // 1. 初始化视图组件
        initViews()

        // 2. 初始化数据库连接
        initDatabase()

        // 3. 检查是否有记住的密码
        checkRememberedPassword()

        // 4. 设置按钮点击监听器
        setupListeners()
    }

    /**
     * 初始化所有视图组件
     */
    private fun initViews() {
        zhanghao = findViewById(R.id.zhanghao)       // 绑定账号输入框
        mima = findViewById(R.id.mima)             // 绑定密码输入框
        denglu = findViewById(R.id.denglu)         // 绑定登录按钮
        zhuce = findViewById(R.id.zhuce)          // 绑定注册按钮
        jizhu = findViewById(R.id.jizhu)        // 绑定"记住密码"复选框

        // 获取SharedPreferences实例，用于存储登录状态
        sharedPrefs = getSharedPreferences("login_prefs", MODE_PRIVATE)
    }

    /**
     * 初始化数据库连接
     */
    private fun initDatabase() {
        try {
            // 创建SQL数据库帮助类实例
            dbHelper = SQL(this)
            // 获取可写数据库
            db = dbHelper.writableDatabase
        } catch (e: Exception) {
            // 数据库初始化失败处理
            Log.e("Database", "初始化失败", e)
            Toast.makeText(this, "数据库初始化失败", Toast.LENGTH_SHORT).show()
        }
    }

    /**
     * 检查是否记住过密码，如果有则自动填充
     */
    private fun checkRememberedPassword() {
        // 检查SharedPreferences中是否设置了记住密码
        if (sharedPrefs.getBoolean("remember_password", false)) {
            // 从SharedPreferences获取保存的用户名和密码
            zhanghao.setText(sharedPrefs.getString("saved_username", ""))
            mima.setText(sharedPrefs.getString("saved_password", ""))
            // 设置复选框为选中状态
            jizhu.isChecked = true
        }
    }

    /**
     * 设置所有按钮的点击监听器
     */
    private fun setupListeners() {
        // 登录按钮点击事件
        denglu.setOnClickListener {
            // 获取输入的用户名和密码
            val username = zhanghao.text.toString()
            val password = mima.text.toString()

            // 验证输入是否为空
            if (username.isEmpty() || password.isEmpty()) {
                Toast.makeText(this, "账号密码不能为空", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }

            try {
                // 查询数据库验证用户凭据
                val cursor = db.query(
                    "logins",                     // 表名
                    arrayOf("username"),         // 要查询的列
                    "username=? AND password=?", // WHERE条件
                    arrayOf(username, password), // WHERE参数
                    null, null, null             // GROUP BY, HAVING, ORDER BY
                )

                // 检查查询结果
                if (cursor.count > 0) {
                    // 登录成功，保存登录状态
                    saveLoginState(username, password)
                    // 跳转到主页面
                    startActivity(Intent(this, shouye::class.java))
                    // 结束当前Activity
                    finish()
                } else {
                    // 登录失败提示
                    Toast.makeText(this, "账号或密码错误", Toast.LENGTH_SHORT).show()
                }
                // 关闭游标
                cursor.close()
            } catch (e: Exception) {
                // 登录过程异常处理
                Toast.makeText(this, "登录失败: ${e.message}", Toast.LENGTH_SHORT).show()
            }
        }

        // 注册按钮点击事件
        zhuce.setOnClickListener {
            try {
                // 跳转到注册页面
                startActivity(Intent(this, zhuce1::class.java))
            } catch (e: Exception) {
                // 跳转失败处理
                Toast.makeText(this, "无法打开注册页面", Toast.LENGTH_LONG).show()
                Log.e("Navigation", "跳转失败", e)
            }
        }
    }

    /**
     * 保存登录状态到SharedPreferences
     * @param username 用户名
     * @param password 密码
     */
    private fun saveLoginState(username: String, password: String) {
        sharedPrefs.edit().apply {
            // 保存"记住密码"状态
            putBoolean("remember_password", jizhu.isChecked)
            // 如果勾选了记住密码，保存用户名和密码
            if (jizhu.isChecked) {
                putString("saved_username", username)
                putString("saved_password", password)
            }
            apply() // 异步提交修改
        }

        // 保存用户名到用户资料SharedPreferences
        val profilePrefs = getSharedPreferences("user_profile", MODE_PRIVATE)
        profilePrefs.edit().putString("username", username).apply()
    }

    override fun onDestroy() {
        super.onDestroy()
        try {
            // 关闭数据库连接
            db.close()
        } catch (e: Exception) {
            Log.e("MainActivity", "关闭数据库时出错", e)
        }
    }
}